home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / ai / prlg195b.lzh / SAMPLES.LZH / BICYCLE.PRO < prev    next >
Text File  |  1986-07-20  |  1KB  |  35 lines

  1. /* Describe the parts required to make a bicycle. Firt the elementary parts
  2. are given (basicpart). Then a description of various subassemblies.
  3. Ask: ?-partsof( hub, P ). to get all the basic parts required to make a hub.
  4. Ask: ?-partsof( bike, P ). for the whole bike. */
  5.  
  6.  
  7. basicpart( rim ).
  8. basicpart( rearframe ).
  9. basicpart( gears ).
  10. basicpart( nut ).
  11. basicpart( spoke ).
  12. basicpart( handles ).
  13. basicpart( bolt ).
  14. basicpart( fork ).
  15.  
  16. assembly( bike, [quant( wheel, 2 ), quant( frame, 1 )] ).
  17. assembly( wheel, [quant( spoke, 20 ), quant( rim, 1 ), quant( hub, 1)] ).
  18. assembly( frame, [quant( rearframe, 1), quant( frontframe, 1 ) ] ).
  19. assembly( frontframe, [quant( fork, 1 ), quant( handles, 1 )] ).
  20. assembly( hub, [quant( gears, 1 ), quant( axle, 1 ) ] ).
  21. assembly( axle, [quant( bolt, 1 ), quant( nut, 2) ] ).
  22.  
  23. partsof( X, [X] ) :- basicpart( X ).
  24. partsof( X, P ) :- assembly( X, Subparts ),
  25.                    partsoflist( Subparts, P ).
  26.  
  27. partsoflist( [], [] ).
  28. partsoflist( [quant( X,N ) | Tail ], Total ) :-
  29.              partsof( X, Headparts ),
  30.              partsoflist( Tail, Tailparts ),
  31.              append( Headparts, Tailparts, Total ).
  32.  
  33. append( [], L, L ).
  34. append( [X|L1], L2, [X|L3] ) :- append( L1, L2, L3 ).
  35.